Assembly Language হল কম্পিউটারের হার্ডওয়্যার এবং মেশিন ল্যাঙ্গুয়েজের মধ্যে সংযোগ স্থাপনকারী নিম্ন স্তরের ভাষা। এটি মেশিন ল্যাঙ্গুয়েজের মতোই কার্যকর, তবে মানুষের কাছে তুলনামূলকভাবে পড়া এবং বোঝা সহজ। নিচে Assembly Language এর মৌলিক ধারণাগুলি ব্যাখ্যা করা হলো:
Assembly Language-এ ব্যবহৃত প্রতিটি নির্দেশনা একটি নির্দিষ্ট প্রক্রিয়া সম্পাদনের জন্য ব্যবহৃত হয়। এই নির্দেশনাগুলি CPU-এর দ্বারা সরাসরি বোঝা যায় এবং কার্যকর করা হয়। উদাহরণস্বরূপ, MOV
, ADD
, SUB
, JMP
ইত্যাদি কমন ইনস্ট্রাকশন।
উদাহরণ:
MOV AX, 1 ; AX রেজিস্টারে ১ মান স্টোর করা
ADD AX, 2 ; AX রেজিস্টারে ২ যোগ করা
MOV
, ADD
, SUB
।উদাহরণ:
MOV AX, BX ; অপকোড: MOV, অপারেন্ড: AX এবং BX
Assembly Language-এ রেজিস্টার হলো CPU-র ছোট এবং দ্রুত মেমোরি লোকেশন, যা ইনস্ট্রাকশন প্রক্রিয়াকরণে ব্যবহৃত হয়। সাধারণ রেজিস্টারগুলি হল:
Assembly Language-এ বিভিন্ন মেমোরি লোকেশনে ডেটা অ্যাক্সেস করার জন্য মেমোরি অ্যাড্রেসিং মোড ব্যবহৃত হয়। কিছু সাধারণ মেমোরি অ্যাড্রেসিং মোড হলো:
উদাহরণ:
MOV AX, [1234h] ; সরাসরি 1234h অ্যাড্রেস থেকে ডেটা পড়া
Assembly Language-এ লেবেল ব্যবহার করা হয় প্রোগ্রামের নির্দিষ্ট স্থানে নির্দেশ করার জন্য। JMP
, JE
, JNE
এর মতো নির্দেশনা ব্যবহার করে প্রোগ্রামে শর্তসাপেক্ষ এবং শর্তবিহীন জাম্প করা যায়।
উদাহরণ:
start:
MOV AX, 5
JMP end
end:
NOP ; কোন কাজ না করার নির্দেশ
Assembly Language-এ স্ট্যাক হলো একটি বিশেষ মেমোরি স্ট্রাকচার, যা LIFO (Last In, First Out) নীতিতে কাজ করে। PUSH
এবং POP
নির্দেশনা ব্যবহার করে স্ট্যাকে ডেটা যোগ এবং সরানো যায়।
উদাহরণ:
PUSH AX ; AX রেজিস্টারের মান স্ট্যাকে সংরক্ষণ করা
POP BX ; স্ট্যাক থেকে মান BX রেজিস্টারে ফেরত আনা
Assembly Language-এ সিস্টেম কল ব্যবহার করে অপারেটিং সিস্টেমের ফাংশনগুলো এক্সিকিউট করা যায়, যেমন ইনপুট/আউটপুট অপারেশন।
উদাহরণ:
MOV AH, 0x09 ; DOS সিস্টেম কলের জন্য ইন্টারাপ্ট ২১h প্রস্তুত করা
INT 0x21 ; সিস্টেম কল কার্যকর করা
Assembly Language এর মৌলিক ধারণাগুলি বুঝলে এটি হার্ডওয়্যার নিয়ন্ত্রণ, সিস্টেম অপ্টিমাইজেশন, এবং নিম্ন-স্তরের সফটওয়্যার ডেভেলপমেন্টে ব্যবহার করা সহজ হয়। এই ধারণাগুলি উচ্চতর ভাষা থেকে Assembly Language এর পার্থক্য এবং কার্যকারিতা বুঝতে সাহায্য করে।
Opcode হলো একটি কম্পিউটার নির্দেশনার অংশ যা নির্দেশ দেয় কোন কাজটি CPU সম্পাদন করবে। এটি নির্দেশনার ধরনকে নির্দেশ করে এবং CPU-কে বলে যে তাকে কী করতে হবে। Opcode সাধারণত বাইনারি বা হেক্সাডেসিমাল ফরম্যাটে থাকে এবং এটি CPU-র দ্বারা বোঝা যায়।
উদাহরণ:
যদি একটি নির্দেশনা ADD EAX, EBX
হয়, তবে ADD
অংশটি হলো Opcode, যা CPU-কে বলে যে তাকে যোগ (Addition) অপারেশন সম্পাদন করতে হবে।
Operand হলো একটি নির্দেশনার অংশ যা Opcode-কে নির্দিষ্ট ডেটা বা রেজিস্টার প্রদান করে, যার উপর অপারেশনটি সম্পাদন করা হবে। Operand গুলি হতে পারে:
EAX
, EBX
, R1
।0x00400000
।5
, 10
।উদাহরণ:ADD EAX, 5
নির্দেশনায় EAX
এবং 5
হলো Operand, যেখানে EAX
হলো গন্তব্য Operand এবং 5
হলো উৎস Operand।
Opcode এবং Operand একসাথে মিলে একটি নির্দেশনা গঠন করে। Opcode নির্দেশ দেয় কোন অপারেশনটি করতে হবে এবং Operand নির্দিষ্ট করে সেই অপারেশনটির ডেটা বা উৎস। CPU Opcode-এর মাধ্যমে নির্দেশনাটি পড়ে এবং Operand-এর মান নিয়ে কাজটি সম্পন্ন করে।
নিচে একটি সাধারণ উদাহরণ:
MOV AX, 10 ; এখানে MOV হলো Opcode যা নির্দেশ করে ডেটা স্থানান্তর করা হবে। AX এবং 10 হলো Operand, যেখানে AX গন্তব্য এবং 10 উৎস।
ইনস্ট্রাকশন | Opcode | Operand |
---|---|---|
MOV AX, 10 | MOV | AX , 10 |
ADD EAX, EBX | ADD | EAX , EBX |
SUB R1, 5 | SUB | R1 , 5 |
JMP 0x0040 | JMP | 0x0040 (মেমোরি অ্যাড্রেস) |
১. Instruction Fetching: CPU প্রোগ্রাম মেমোরি থেকে একটি নির্দেশনা পড়ে।
২. Instruction Decoding: CPU নির্দেশনাটি ডিকোড করে, Opcode এবং Operand আলাদা করে।
৩. Execution: Opcode অনুযায়ী CPU কার্য সম্পাদন করে Operand-এর উপর অপারেশন সম্পন্ন করে।
Opcode এবং Operand কম্পিউটার নির্দেশনার দুটি গুরুত্বপূর্ণ উপাদান। Opcode নির্দেশ করে কোন কাজটি সম্পাদন করতে হবে, এবং Operand নির্দিষ্ট করে কাজের জন্য প্রয়োজনীয় ডেটা বা রেজিস্টার। এই দুটি উপাদান একত্রে একটি সম্পূর্ণ নির্দেশনা গঠন করে, যা CPU কার্য সম্পাদনের জন্য ব্যবহার করে।
Registers হল প্রক্রিয়াকরণের সময় তথ্য সঞ্চয় ও প্রক্রিয়া করার জন্য CPU-র ভিতরে থাকা উচ্চ-গতির মেমোরি এলিমেন্ট। এগুলো CPU-এর কার্যকারিতা বৃদ্ধিতে গুরুত্বপূর্ণ ভূমিকা পালন করে। Registers প্রধানত দুই ধরনের: General-purpose এবং Special-purpose।
প্রধান কাজ:
প্রধান কাজ:
বৈশিষ্ট্য | General-purpose Registers | Special-purpose Registers |
---|---|---|
প্রধান কাজ | সাধারণ ডেটা সংরক্ষণ ও প্রক্রিয়াকরণ। | CPU-এর কার্যকারিতা ও প্রোগ্রামের অবস্থা নিয়ন্ত্রণ। |
ব্যবহার | গাণিতিক, লজিক্যাল অপারেশন, ডেটা স্থানান্তর। | প্রোগ্রাম কাউন্টার, স্ট্যাক নিয়ন্ত্রণ, স্ট্যাটাস ট্র্যাক। |
উদাহরণ | EAX, EBX, R0, R1, $t0, $s1 ইত্যাদি। | Program Counter (PC), Stack Pointer (SP), Flags Register (FR) ইত্যাদি। |
ডেটা ধরন | সাধারণ ডেটা এবং অপারেশনাল ভেরিয়েবল। | নিয়ন্ত্রণ এবং অবস্থা নির্দেশক ডেটা। |
General-purpose Registers মূলত CPU-র সাধারণ ডেটা অপারেশনগুলির জন্য ব্যবহার করা হয়, যেখানে Special-purpose Registers CPU-র কার্যকারিতা নিয়ন্ত্রণ এবং প্রোগ্রামের অবস্থা ট্র্যাক করার জন্য ব্যবহৃত হয়। উভয় ধরনের রেজিস্টার CPU-র কার্যকারিতা বাড়াতে গুরুত্বপূর্ণ ভূমিকা পালন করে।
Memory Addressing এবং Data Movement হল Assembly Language এর দুইটি গুরুত্বপূর্ণ ধারণা, যা CPU এর সাথে মেমোরি এবং ডেটা আদান-প্রদানের পদ্ধতিকে বোঝায়। নিচে এই দুটি বিষয়ের বিস্তারিত আলোচনা করা হলো:
Memory Addressing হলো প্রক্রিয়া যেখানে প্রসেসর মেমোরি থেকে ডেটা পড়তে বা লিখতে নির্দিষ্ট মেমোরি ঠিকানা ব্যবহার করে। এটি মেমোরি ব্যবস্থাপনার জন্য অপরিহার্য। Assembly Language-এ বিভিন্ন ধরনের মেমোরি অ্যাড্রেসিং মোড রয়েছে। কিছু গুরুত্বপূর্ণ মেমোরি অ্যাড্রেসিং মোড নিচে দেওয়া হলো:
উদাহরণ:
MOV AX, 10 ; AX রেজিস্টারে সরাসরি ১০ লোড করা
উদাহরণ:
MOV AX, [1234h] ; 1234h ঠিকানা থেকে ডেটা AX রেজিস্টারে লোড করা
উদাহরণ:
MOV AX, [BX] ; BX রেজিস্টার দ্বারা নির্দেশিত ঠিকানা থেকে ডেটা AX-এ লোড করা
উদাহরণ:
MOV AX, [BX + SI] ; BX এবং SI যোগফলের ঠিকানা থেকে ডেটা AX-এ লোড করা
Data Movement নির্দেশনাগুলি CPU এবং মেমোরি বা CPU-এর মধ্যে রেজিস্টারগুলির মধ্যে ডেটা স্থানান্তরের জন্য ব্যবহৃত হয়। এটি প্রোগ্রামের কাজের ক্ষেত্রে গুরুত্বপূর্ণ ভূমিকা পালন করে। Assembly Language-এ সাধারণ ডেটা মুভমেন্ট নির্দেশনাগুলি নিচে দেওয়া হলো:
উদাহরণ:
MOV AX, BX ; BX রেজিস্টারের ডেটা AX রেজিস্টারে স্থানান্তর করা
উদাহরণ:
PUSH AX ; AX রেজিস্টারের ডেটা স্ট্যাকে রাখা
POP BX ; স্ট্যাক থেকে ডেটা BX রেজিস্টারে স্থানান্তর করা
উদাহরণ:
LEA AX, [BX + SI] ; BX এবং SI যোগফলের কার্যকরী ঠিকানা AX-এ লোড করা
উদাহরণ:
XCHG AX, BX ; AX এবং BX রেজিস্টারের ডেটা অদল-বদল করা
Memory Addressing এবং Data Movement Assembly Language এর গুরুত্বপূর্ণ অংশ, যা CPU, মেমোরি এবং অন্যান্য রেজিস্টারগুলির মধ্যে ডেটা স্থানান্তর এবং পরিচালনার জন্য ব্যবহৃত হয়। এগুলি প্রোগ্রামের কার্যকারিতা ও নিয়ন্ত্রণ নিশ্চিত করতে সহায়ক।
Instruction Set Architecture (ISA) একটি কম্পিউটারের CPU-র অপারেশন নির্দেশনা সেটের ভিত্তি এবং কার্যপ্রণালী বোঝায়। এটি একটি গুরুত্বপূর্ণ স্তর যা হার্ডওয়্যার এবং সফটওয়্যারের মধ্যে যোগাযোগের মাধ্যমে কাজ করে। Assembly Language সরাসরি ISA-এর সাথে কাজ করে, কারণ এটি সেই ভাষা যা ISA-এর নির্দেশনাকে মানুষের পঠনযোগ্য আকারে উপস্থাপন করে। নিচে ISA এবং Assembly Language এর সম্পর্ক বিস্তারিতভাবে আলোচনা করা হলো:
MOV
, ADD
, SUB
নির্দেশনাগুলি ISA-এর মধ্যে অন্তর্ভুক্ত, যা Assembly Language ব্যবহার করে লিখিত হয়।উদাহরণ (x86 ISA):
MOV AX, 5 ; AX রেজিস্টারে ৫ মান সেট করা
ADD AX, 10 ; AX রেজিস্টারে ১০ যোগ করা
উপরের কোডটি x86 ISA-এর নির্দেশনাগুলির উপর ভিত্তি করে।
বৈশিষ্ট্য | Instruction Set Architecture (ISA) | Assembly Language |
---|---|---|
সংজ্ঞা | CPU নির্দেশনা সেটের নির্দিষ্ট মান এবং কার্যপ্রণালী | মানব-পঠনযোগ্য ভাষা যা ISA-এর নির্দেশনাগুলিকে উপস্থাপন করে |
অংশ | নির্দেশনা সেট, রেজিস্টার, অ্যাড্রেসিং মোড | কোডিং সিনট্যাক্স এবং নির্দেশনার সমন্বয় |
ব্যবহার | হার্ডওয়্যার নির্দেশনা কার্যকর করতে | প্রোগ্রামাররা কোড লেখার জন্য ব্যবহার করেন |
নির্ভরতা | হার্ডওয়্যার নির্ভর | ISA-এর উপর নির্ভরশীল |
ISA-এর পরিবর্তন বা উন্নয়ন হলে সংশ্লিষ্ট Assembly Language-এও পরিবর্তন আসতে পারে। উদাহরণস্বরূপ, x86 আর্কিটেকচারে ৬৪-বিট প্রসেসর আসার পর নতুন নির্দেশনা যুক্ত হয় এবং Assembly Language-এ সেগুলো ব্যবহারের সুযোগ আসে।
Instruction Set Architecture (ISA) এবং Assembly Language এর মধ্যে একটি ঘনিষ্ঠ সম্পর্ক রয়েছে। ISA নির্দেশনা সেট এবং প্রসেসর কার্যপ্রণালী নির্ধারণ করে, যা Assembly Language-এ প্রোগ্রামারদের লেখা নির্দেশনাকে মেশিন ভাষায় রূপান্তরিত করে। Assembly Language আসলে ISA-এর ওপর ভিত্তি করে গঠিত হয়, যা প্রোগ্রামারদের জন্য হার্ডওয়্যার নিয়ন্ত্রণকে সহজতর করে।
common.read_more